/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import exception.NomIdentiqueException;
import exception.SaisieNomException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Locale;
import modele.AbstractJoueur;
import modele.IASequentielle;
import modele.Joueur;
import modele.ModeleYams;
import modele.ModeleYamsInterface;
import vue.VueAccueil;
import vue.VueSaisirJoueur;
import vue.VueYams;

/**
 * Gère la saisie des nom des joueurs et crée automatiquement le joueur
 * en cas de partie contre l'IA.
 * @author Khémon Beh & Florian Minin
 */
public class ControllerSaisirJoueur implements ActionListener, WindowListener {

    private VueSaisirJoueur vue;
    private ModeleYamsInterface modele;

    public ControllerSaisirJoueur(VueSaisirJoueur _vue, ModeleYamsInterface _modele) {
        vue = _vue;
        modele = _modele;
    }

    public void actionPerformed(ActionEvent e) {
        String ac = e.getActionCommand();
        //Boutons de traductions de la fenêtre
        if (ac.equals(VueSaisirJoueur.BTN_FR)) {
            vue.setLangue(Locale.FRANCE);
        } else if (ac.equals(VueSaisirJoueur.BTN_EN)) {
            vue.setLangue(Locale.UK);
        } else if (ac.equals(VueSaisirJoueur.BTN_OK)) {
            AbstractJoueur j1, j2;
            String nomJ1, nomJ2;
            nomJ1 = vue.getTextNameJoueur1();
            try {

                //Si l'utilisateur a choisi de jouer contre le CPU
                if (vue.leJ2estCPU()) {
                    j2 = new IASequentielle(ModeleYams.CODE_JOUEUR2);
                    nomJ2 = j2.getNom();
                } //Si c'est le mode 2 joueur
                else {
                    nomJ2 = vue.getTextNameJoueur2();
                    j2 = new Joueur(nomJ2, ModeleYams.CODE_JOUEUR2);
                }

                //****Test des erreurs de saisie *****/
                if (nomJ1.equals("") || nomJ2.equals("")) {
                    throw new SaisieNomException();
                }
                if (nomJ1.equals(nomJ2)) {
                    throw new NomIdentiqueException();
                }

                //On ajoute les joueurs au modele
                j1 = new Joueur(nomJ1, ModeleYams.CODE_JOUEUR1);
                VueYams vueYams = new VueYams(vue.getLocale(), nomJ1, nomJ2);
                modele.ajouteJoueurs(j1, j2);
                ApplicationController appCtrler = new ApplicationController(vueYams, modele);
                vueYams.abonnementAUnListener(appCtrler);
                vueYams.setVisible(true);
                vue.cacherFenetre();
            } catch (SaisieNomException sne) {
                vue.afficheErreurNomVide();
            } catch (NomIdentiqueException nie) {
                vue.afficheErreurNomIdentique();
            }
        }
    }

    public void windowOpened(WindowEvent e) {
    }

    public void windowClosing(WindowEvent e) {
    }

    public void windowClosed(WindowEvent e) {
        //On crée une nouvelle vue d'accueil en prenant la locale en cours
        //comme langue de référence
        VueAccueil vueAccueil = new VueAccueil(vue.getLocale());
        ControllerAccueil ctrl = new ControllerAccueil(vueAccueil, modele);
        vueAccueil.abonneComposants(ctrl);
        vueAccueil.setVisible(true);
    }

    public void windowIconified(WindowEvent e) {
    }

    public void windowDeiconified(WindowEvent e) {
    }

    public void windowActivated(WindowEvent e) {
    }

    public void windowDeactivated(WindowEvent e) {
    }
}
